home *** CD-ROM | disk | FTP | other *** search
/ Night Owl 6 / Night Owl's Shareware - PDSI-006 - Night Owl Corp (1990).iso / 037a / tpfast40.zip / T_FILE.PAS < prev    next >
Pascal/Delphi Source File  |  1991-11-15  |  6KB  |  205 lines

  1. { -------------------------------------------------------------------------- }
  2. {                                 t_file.pas                                 }
  3. {                      demo of file  functions for TPFAST                    }
  4. { -------------------------------------------------------------------------- }
  5. uses dos,crt,tpfast;
  6.  
  7. type
  8.       userrec = record
  9.                  name      :string[18];
  10.                  address   :string[40];
  11.                  phone     :string[14];
  12.                end;
  13.  
  14.  
  15. const
  16.       maxrecs     = 5;           { maximum records }
  17.       fname       = 'test.rec';  { sample file name }
  18.  
  19.       f_read      = 0;       { used in fopen }
  20.       f_write     = 1;       { ditto }
  21.       f_readwrite = 2;       { ditto }
  22.  
  23.       readonly    = 1;       { already defined standard run-time }
  24.       hidden      = 2;       { use logical OR for combined file attributes }
  25.       sysfile     = 4;
  26.       volumeid    = 8;
  27.       directory   = 16;
  28.       archive     = 32;
  29.  
  30. var
  31.       ch        :char;
  32.       testrecs  :array [1..maxrecs] of userrec;
  33.  
  34.  
  35. { -------------------------------------------------------------------------- }
  36. procedure errorexit(msg :string);
  37.  
  38. begin
  39.     writeln('Error -',msg);
  40.     halt(1);
  41. end;
  42.  
  43. { -------------------------------------------------------------------------- }
  44. procedure maketestarray;
  45.  
  46. begin
  47.  
  48. with testrecs[1] do
  49.  begin
  50.    name    := 'Eddy Murphey';
  51.    address := '33 Holywood ave';
  52.    phone   := '132-3346';
  53.  end;
  54. with testrecs[2] do
  55.  begin
  56.    name    := 'Jack Frost';
  57.    address := '11 Omeo road Mount Hotham';
  58.    phone   := '054-230-1306';
  59.  end;
  60. with testrecs[3] do
  61.  begin
  62.    name    := 'Indiana Jones';
  63.    address := '44 Hospital avenue Egypt';
  64.    phone   := '991-3127';
  65.  end;
  66. with testrecs[4] do
  67.  begin
  68.    name    := 'Jenny Morris';
  69.    address := '9 Music house raod Australia';
  70.    phone   := '(07)-568-9129';
  71.  end;
  72. with testrecs[5] do
  73.  begin
  74.    name    := 'Ivan Ackerman';
  75.    address := '40 Woody allen bollevard Coloreado';
  76.    phone   := '(291)-345-6729';
  77.  end;
  78. end;
  79.  
  80. { -------------------------------------------------------------------------- }
  81. procedure maketestfile;
  82.  
  83. var
  84.   f                        :integer;
  85.   numwritten,loop          :integer;
  86.  
  87. begin
  88.   writeln('[ Making test file  ....         ]');
  89.   maketestarray;                                   { init array with names }
  90.   f := fcreate(fname,archive);                     { create the file }
  91.   case (f) of
  92.      -3  : errorexit('path not found');
  93.      -4  : errorexit('too many open files');
  94.      -5  : errorexit('access denied');
  95.    end;
  96.  
  97.   for loop := 1 to maxrecs do
  98.     numwritten := fwrite(f,sizeof(testrecs[loop]),testrecs[loop]);
  99.   if (fclose(f) = false) then
  100.       writeln('Unable to close file ',fname);
  101. end;
  102.  
  103. { -------------------------------------------------------------------------- }
  104. procedure readtestfile;
  105.  
  106. var
  107.   f,numread           :integer;
  108.   buf                 :userrec;
  109.  
  110. begin
  111.   writeln('[ Reading test file ....         ]');
  112.   writeln;
  113.   f := fopen(fname,0);                               { open for reading }
  114.   repeat
  115.     numread := fread(f,sizeof(buf),buf);             { read one record }
  116.     if (numread > 0) then                            { if read OK }
  117.       writeln(buf.name:18,buf.address:40,buf.phone:16);
  118.   until (numread <= 0);
  119.  
  120.   if (fclose(f) = false) then                        { close file }
  121.       writeln('Unable to close file ',fname);        { check if OK }
  122. end;
  123.  
  124.  
  125. { -------------------------------------------------------------------------- }
  126. procedure  appendrec;
  127.  
  128. var
  129.       f                   :integer;
  130.       pos,newpos          :longint;
  131.       buf                 :userrec;
  132.       numwritten          :integer;
  133.  
  134. begin
  135. writeln('[ Appending a record  ....       ]');
  136. with buf do
  137.  begin                                     { create a temp record }
  138.    name    := 'Darren Bastard';
  139.    address := '99 Horse Court ';
  140.    phone   := '784-2876';
  141.  end;
  142.  
  143.   f := fopen(fname,1);                     { open for writing }
  144.   if (f < 0 ) then                         { check if OK }
  145.     errorexit('Unable to open file');
  146.  
  147.   pos := maxrecs * sizeof(buf);            { move to end of file }
  148.  
  149.   if (fseek(f,0,pos,newpos) = false) then  { check if OK }
  150.        errorexit('Error in FSeek operation ...');
  151.  
  152.   numwritten := fwrite(f,sizeof(buf),buf);  { write the record }
  153.     if numwritten < sizeof(buf) then        { check if OK }
  154.        errorexit('in appending to file ...');
  155.  
  156.   if (fclose(f) = false) then               { close file }
  157.     errorexit('Unable to close file.');     { check if OK }
  158. end;
  159.  
  160. { -------------------------------------------------------------------------- }
  161. procedure  updaterec(recno :byte);
  162.  
  163. var
  164.       f                  :integer;
  165.       pos,newpos         :longint;
  166.       buf                :userrec;
  167.       numwritten         :integer;
  168.  
  169. begin
  170. writeln('Updating record number ',recno,' ....');
  171. with buf do
  172.  begin                                      { create temp record }
  173.    name    := 'Darren Bastard';
  174.    address := '99 Horse Court ';
  175.    phone   := '784-2876';
  176.  end;
  177.  
  178.   f := fopen(fname,1);                      { open file for reading }
  179.   if (f < 0 ) then                          { check if OK }
  180.     errorexit('Unable to open file');
  181.  
  182.   pos := recno * sizeof(buf);               { calculate record position }
  183.   if (fseek(f,0,pos,newpos) = false) then   { move to record position }
  184.     errorexit('File seek failed.');
  185.  
  186.   numwritten := fwrite(f,sizeof(buf),buf);  { write the record }
  187.     if numwritten < sizeof(buf) then        { check if OK }
  188.        errorexit('in appending to file ...');
  189.  
  190.   if (fclose(f) = false) then               { close file }
  191.     errorexit('Unable to close file.');     { check if OK }
  192. end;
  193.  
  194. { -------------------------------------------------------------------------- }
  195. begin
  196.  clrscr;
  197.  maketestfile;
  198.  readtestfile;
  199.  ch := readkey;
  200.  updaterec(2);
  201.  readtestfile;
  202.  ch := readkey;
  203. end.
  204.  
  205.